package ejbtienda;

import java.util.List;

import javax.ejb.Remote;

import modelo.Carro;
import modelo.Producto;

/**
 * Interfaz remota para poder acceder a los metodos de TiendaBean.
 * 
 * @author Franco Camilo Gonzalez Chaparro.
 */
@Remote
public interface TiendaBeanRemote {
    /**
     * El metodo obtenerProductosDisponibles es para obtener una lista de
     * productos.
     * 
     * @param pag
     *            es el numero de pagina actual en que esta la lista de
     *            productos en la vista de la tienda.
     * @param cantRegistros
     *            es la cantidad(5,10 o 15) de registros de productos que se
     *            desea obtener desde la base de datos.
     * @param campo es el campo de la tabla por la que se ordenara el select
     * @param orden es el tipo de orden con el que se hara el select
     *            ascendente o descendente
     * @return la lista de productos de acuerdo al numero de pagina y a la
     *         cantidad de registros.
     */
    List<Producto> obtenerProductosDisponibles(int pag, int cantRegistros,
            String campo, String orden);

    /**
     * El metodo agregarProd es para agregar un nuevo producto al detalle de
     * un carro si esque el producto no existe en el carro. si el producto ya
     * existe se utiliza el metodo {@link #agregarCantidad(Carro, String)}.
     * 
     * @param carro
     *            es el carro de compras que tiene la tienda
     * @param codProd
     *            es el identificador unico de un producto.
     * @return el carro con el nuevo producto incluido.
     */
    Carro agregarProd(Carro carro, String codProd);

    /**
     * El metodo agregarCantidad es para aumentar la cantidad de un producto
     * que se encuentra en un detalle de carro. se aumentara la cantidad si y
     * solo si el stock del producto es menor a la cantidad actual que se
     * tiene del producto en el detalle de carro.
     * 
     * @param carro
     *            es el carro de compras que tiene la tienda
     * @param codProd
     *            es el identificador unico de un producto.
     * @return el carro con la cantidad del producto aumentada.
     */
    Carro agregarCantidad(Carro carro, String codProd);

    /**
     * El metodo quitarCantidad es para disminuir la cantidad de un producto
     * que se encuentra en un detalle de carro. se disminuira la cantidad si y
     * solo si la cantidad actual que se tiene del producto en el detalle de
     * carro es mayor a 1.
     * 
     * @param carro
     *            es el carro de compras que tiene la tienda
     * @param codProd
     *            es el identificador unico de un producto.
     * @return el carro con la cantidad del producto disminuida.
     */
    Carro quitarCantidad(Carro carro, String codProd);

    /**
     * El metodo realizarVenta recorre el detalle del carro y si el stock del
     * producto desde la base de datos es mayor o igual a la cantidad que se
     * quiere comprar del producto entonces se descuenta esta cantidad al
     * stock del producto en la base de datos.
     * 
     * @param carro
     *            es el carro de compras que tiene la tienda
     * @return (true o false) si la venta se realizo con exito retorna true y
     *         si ocurrio algun problema retorna false.
     */
    boolean realizarVenta(Carro carro);

    /**
     * El metodo eliminarProd se encarga de eliminar un detalle con su
     * producto del carro. busca en la lista de detalle de carro que contiene
     * el carro y si encuentra un detalle de carro que contenga al producto a
     * eliminar, lo remueve de la lista.
     * 
     * @param carro  es el carro de compras que tiene la tienda
     * @param codProd
     *            es el identificador unico de un producto.
     * @return  el carro con el detalle de carro actualizado.
     */
    Carro eliminarProd(Carro carro, String codProd);
}
